﻿using System;

namespace Serene
{
    ///<summary>
    /// The Serene Criteria Manager
    ///</summary>
    public interface ISereneManager
    {
        /// <summary>
        /// Runs the Criteria
        /// </summary>
        /// <returns>The results of the criteria that have been run</returns>
        IReadonlyStatus RunCriteria();

        /// <summary>
        /// Redirects the user to marketplace immediately
        /// </summary>
        void RedirectToMarketPlace();

        /// <summary>
        /// Prompts the user to rate the application if the criteria is met,
        /// if they choose cancel, then the remind again date is used
        /// </summary>
        /// <param name="prompt">The text to prompt the user with</param>
        /// <param name="promptTitle">Title of the prompt</param>
        /// <param name="remindAgainIn">When to remind the user again if they cancel</param>
        void RedirectToMarketPlaceIfRequired(string prompt, string promptTitle, DateTime remindAgainIn);

        /// <summary>
        /// Reminds the user to rate the application again at a later date
        /// </summary>
        /// <param name="when">The date to next prompt the user</param>
        void RemindAgainLater(DateTime when);
    }
}
